package gui.estudiante;

import java.awt.Color;
import java.awt.Rectangle;
import java.awt.SystemColor;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import modelo.ModeloCursoEstudiante;
import modelo.ModeloCursosInscritosEstudiantes;

import javax.swing.BorderFactory;
import javax.swing.border.TitledBorder;

import utils.MotorHorario;

import java.awt.Font;

public class PanelEstudianteCurso extends JPanel {

	private static final long serialVersionUID = 1L;
	private JButton btnAceptar = null;
	private JLabel lblTitulo = null;
	private JLabel lblLinea = null;
	private JPanel panelCursos = null;
	private JScrollPane jspCurso = null;
	private JTable tblCurso = null;
	private ModeloCursoEstudiante modeloCursoEstudiante = null;
	private ModeloCursosInscritosEstudiantes modeloCursosInscritosEstudiantes = null;
	private JPanel panelCursoInscritoEstudiante = null;
	private JScrollPane jspListaCursoEstudianteInscrito = null;
	private JTable tblListaCursoEstudianteInscrito = null;
	private JLabel lblLineaIntermedia = null;
	private JButton btnQuitarCurso = null;
	private JLabel lblNoHayCursos = null;
	private JLabel lblNoHayCursosInscritos = null;

	/**
	 * This is the default constructor
	 */
	public PanelEstudianteCurso() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {

		lblLineaIntermedia = new JLabel();
		lblLineaIntermedia.setBackground(Color.gray);
		lblLineaIntermedia.setBounds(new Rectangle(9, 373, 871, 3));
		lblLineaIntermedia.setBackground(SystemColor.activeCaptionBorder);
		lblLineaIntermedia.setOpaque(true);
		lblLineaIntermedia.setText("");
		this.modeloCursoEstudiante = ModeloCursoEstudiante.getInstancia();
		this.modeloCursosInscritosEstudiantes = ModeloCursosInscritosEstudiantes
				.getInstancia();
		lblLinea = new JLabel();
		lblLinea.setBounds(new Rectangle(11, 59, 860, 4));

		lblLinea.setForeground(Color.black);
		lblLinea.setBackground(SystemColor.activeCaptionBorder);
		lblLinea.setOpaque(true);
		lblLinea.setText("");
		lblTitulo = new JLabel();
		lblTitulo.setBounds(new Rectangle(15, 28, 258, 26));
		lblTitulo.setText("Seleccione los cursos para este estudiante");
		this.setSize(899, 397);
		this.setLayout(null);
		this.add(lblTitulo, null);
		this.add(lblLinea, null);
		this.add(getPanelCursos(), null);
		this.add(getPanelCursoInscritoEstudiante(), null);
		this.add(lblLineaIntermedia, null);
		verificarRegistros();
	}

	/**
	 * This method initializes btnAceptar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnAceptar() {
		if (btnAceptar == null) {
			btnAceptar = new JButton();
			btnAceptar.setText("Agregar Curso al Estudiante");
			btnAceptar.setIcon(new ImageIcon("./lib/images/add.png"));
			btnAceptar.setBounds(new Rectangle(331, 221, 213, 32));
			btnAceptar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {

					if (validarSeleccion(tblCurso) == false) {
						JOptionPane.showMessageDialog(null,
								"No ha seleccionado ningun curso", "Error",
								JOptionPane.ERROR_MESSAGE);
					} else {

						for (int i = 1, z = 0; i <= tblCurso.getRowCount(); i++, z++) {
							if (tblCurso.getValueAt(z, 4).toString()
									.equalsIgnoreCase("true")) {

								int idCurso = Integer.parseInt(tblCurso
										.getValueAt(z, 0).toString());
								if(MotorHorario.getInstancia().isHorarioDisponiblePorEstudiante(PanelEstudiante.getIdEstudiante(), idCurso)){
									modeloCursoEstudiante.agregarEstudianteCurso(
											idCurso, PanelEstudiante
													.getIdEstudiante());
								}else{
									break;
								}
								

							}

						}
						modeloCursoEstudiante.actualizarTabla();
						modeloCursosInscritosEstudiantes.actualizarTabla();

						verificarRegistros();

						// Actualizando ammbos tabla el de los cursos
						// disponibles y el cursos inscritos
					}
				}

			});
		}
		return btnAceptar;
	}

	/**
	 * This method initializes panelCursos 12, 25, 850, 185
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelCursos() {
		if (panelCursos == null) {
			lblNoHayCursos = new JLabel();
			lblNoHayCursos.setBounds(new Rectangle(300, 36, 256, 34));
			lblNoHayCursos.setFont(new Font("Dialog", Font.BOLD, 18));
			lblNoHayCursos.setText("No Hay Cursos Disponibles ");
			panelCursos = new JPanel();
			panelCursos.setLayout(null);

			panelCursos.setBounds(new Rectangle(6, 90, 871, 266));
			panelCursos.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(SystemColor.infoText, 1),
					"Cursos Disponibles", TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 14), SystemColor.controlText));
			panelCursos.setForeground(Color.red);
			panelCursos.add(getJspCurso(), null);
			panelCursos.add(getBtnAceptar(), null);
			panelCursos.add(lblNoHayCursos, null);
		}
		return panelCursos;
	}

	/**
	 * This method initializes jspCurso
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJspCurso() {
		if (jspCurso == null) {
			jspCurso = new JScrollPane();
			jspCurso.setBounds(new Rectangle(12, 25, 850, 185));
			jspCurso.setViewportView(getTblCurso());
		}
		return jspCurso;
	}

	/**
	 * This method initializes tblCurso
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTblCurso() {
		if (tblCurso == null) {
			tblCurso = new JTable(modeloCursoEstudiante);

		}
		return tblCurso;
	}

	public boolean validarSeleccion(JTable table) {

		for (int i = 0; i < table.getRowCount(); i++) {
			if (table.getValueAt(i, 4).toString().equalsIgnoreCase("true")) {
				return true;
			}

		}

		return false;
	}

	// verificarRegistros() este metodo verifica si hay algun registro en el
	// table si no lo hay entonce muestra un label
	private void verificarRegistros() {

		if (tblCurso.getRowCount() == 0) {
			jspCurso.setBounds(0, 0, 0, 0);
			btnAceptar.setEnabled(false);

		} else {
			btnAceptar.setEnabled(true);
			jspCurso.setBounds(12, 25, 850, 185);
		}

		if (tblListaCursoEstudianteInscrito.getRowCount() == 0) {
			jspListaCursoEstudianteInscrito.setBounds(0, 0, 0, 0);
			btnQuitarCurso.setEnabled(false);

		} else {
			btnQuitarCurso.setEnabled(true);
			jspListaCursoEstudianteInscrito.setBounds(13, 25, 844, 237);
		}

	}

	/**
	 * This method initializes panelCursoInscritoEstudiante
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelCursoInscritoEstudiante() {
		if (panelCursoInscritoEstudiante == null) {
			lblNoHayCursosInscritos = new JLabel();
			lblNoHayCursosInscritos.setBounds(new Rectangle(272, 34, 382, 43));
			lblNoHayCursosInscritos
					.setText("No Tiene Cursos Asignado este Estudiante");
			lblNoHayCursosInscritos.setFont(new Font("Dialog", Font.BOLD, 18));
			panelCursoInscritoEstudiante = new JPanel();
			panelCursoInscritoEstudiante.setLayout(null);
			panelCursoInscritoEstudiante.setBounds(new Rectangle(6, 398, 871,
					321));
			panelCursoInscritoEstudiante.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(SystemColor.controlText, 1), "Lista Curso Inscrito del Estudiante", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 14), SystemColor.controlText));
			panelCursoInscritoEstudiante.add(
					getJspListaCursoEstudianteInscrito(), null);
			panelCursoInscritoEstudiante.add(getBtnQuitarCurso(), null);
			panelCursoInscritoEstudiante.add(lblNoHayCursosInscritos, null);
		}
		return panelCursoInscritoEstudiante;
	}

	/**
	 * This method initializes jspListaCursoEstudianteInscrito
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJspListaCursoEstudianteInscrito() {
		if (jspListaCursoEstudianteInscrito == null) {
			jspListaCursoEstudianteInscrito = new JScrollPane();
			jspListaCursoEstudianteInscrito.setBounds(new Rectangle(13, 25,
					844, 237));
			jspListaCursoEstudianteInscrito
					.setViewportView(getTblListaCursoEstudianteInscrito());
		}
		return jspListaCursoEstudianteInscrito;
	}

	/**
	 * This method initializes tblListaCursoEstudianteInscrito
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTblListaCursoEstudianteInscrito() {
		if (tblListaCursoEstudianteInscrito == null) {
			tblListaCursoEstudianteInscrito = new JTable(
					modeloCursosInscritosEstudiantes);
		}
		return tblListaCursoEstudianteInscrito;
	}

	/**
	 * This method initializes btnQuitarCurso
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnQuitarCurso() {
		if (btnQuitarCurso == null) {
			btnQuitarCurso = new JButton();
			btnQuitarCurso.setBounds(new Rectangle(330, 273, 204, 32));
			btnQuitarCurso.setText("Quitar Curso al Estudiante");
			btnQuitarCurso.setIcon(new ImageIcon("./lib/images/salir.png"));
			btnQuitarCurso
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (validarSeleccion(tblListaCursoEstudianteInscrito) == false) {
								JOptionPane
										.showMessageDialog(
												null,
												"No ha seleccionado ningun curso para quitar",
												"Error",
												JOptionPane.ERROR_MESSAGE);
							} else {

								for (int i = 1, z = 0; i <= tblListaCursoEstudianteInscrito
										.getRowCount(); i++, z++) {
									if (tblListaCursoEstudianteInscrito
											.getValueAt(z, 4).toString()
											.equalsIgnoreCase("true")) {

										int idCurso = Integer
												.parseInt(tblListaCursoEstudianteInscrito
														.getValueAt(z, 0)
														.toString());

										modeloCursosInscritosEstudiantes
												.eliminar(
														idCurso,
														PanelEstudiante
																.getIdEstudiante());

									}
								}
								modeloCursosInscritosEstudiantes
										.actualizarTabla();
								modeloCursoEstudiante.actualizarTabla();
								verificarRegistros();

							}

						}
					});
		}
		return btnQuitarCurso;
	}

} // @jve:decl-index=0:visual-constraint="30,49"
